package JavaEE_notes.common_API.Network;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP 通信练习 - 服务端
 * @author TaiZai
 * @data 2024/9/26 10:50
 */
public class TCP_Server {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动");
        // 1、创建 ServerSocket 对象，并指定监听的端口
        ServerSocket serverSocket = new ServerSocket(7878);

        // 2、使用 accept() 方法接收来自客户端的连接
        Socket socket = serverSocket.accept();

        // 3、从 Socket 通信管道中得到一个字节输入流，用来读取来自客户端的数据
        InputStream is = socket.getInputStream();

        // 4、把原始的字节输入流包装成数据输入流
        DataInputStream dis = new DataInputStream(is);

        // 5、使用数据输入流读取客户端发送过来的信息  单次读取
        // String info = dis.readUTF();
        // System.out.println(info);
        // System.out.println(socket.getRemoteSocketAddress()); // 获取客户端的IP地址

        // 多次读取
        while (true) {
            try {
                String info = dis.readUTF();
                System.out.println(info);
                System.out.println(socket.getRemoteSocketAddress());
            } catch (IOException e) {
                e.printStackTrace();
                dis.close();
                is.close();
                socket.close();
                serverSocket.close();
            }
        }

        // 6、关闭相关的流和 socket
        // dis.close();
        // is.close();
        // socket.close();
        // serverSocket.close();

        // System.out.println("服务端关闭");
    }
}
